import axios from "axios";
import { ElMessage, ElMessageBox } from "element-plus";
import router from "@/router";

// 创建 axios 实例
const service = axios.create({
	baseURL: "http://localhost:5192/api", // API 基础URL
	timeout: 10000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
	(config) => {
		// 从 localStorage 获取 token
		const token = localStorage.getItem("token");
		if (token) {
			config.headers["Authorization"] = `Bearer ${token}`;
		}
		return config;
	},
	(error) => {
		console.error("请求错误：", error);
		return Promise.reject(error);
	}
);

// 响应拦截器
service.interceptors.response.use(
	(response) => {
		return response.data;
	},
	(error) => {
		console.error("响应错误：", error);
		const { response } = error;

		if (response) {
			// 根据状态码处理错误
			switch (response.status) {
				case 401:
					// token 过期或无效
					ElMessageBox.confirm("登录状态已过期，请重新登录", "系统提示", {
						confirmButtonText: "重新登录",
						cancelButtonText: "取消",
						type: "warning",
					}).then(() => {
						localStorage.removeItem("token");
						router.push("/login");
					});
					break;
				case 403:
					ElMessage.error("没有权限访问该资源");
					break;
				case 404:
					ElMessage.error("请求的资源不存在");
					break;
				case 500:
					ElMessage.error("服务器错误，请联系管理员");
					break;
				default:
					ElMessage.error(response.data || "未知错误");
			}
		} else {
			// 请求超时或网络错误
			ElMessage.error("网络错误，请检查您的网络连接");
		}

		return Promise.reject(error);
	}
);

export default service;
